package com.taxi.driver.api;

import com.taxi.driver.data.entity.AssessmentEntity;
import com.taxi.driver.data.entity.BillEntity;
import com.taxi.driver.data.entity.CancelReasonEntity;
import com.taxi.driver.data.entity.CommentEntity;
import com.taxi.driver.data.entity.ComplainEntity;
import com.taxi.driver.data.entity.DriverEntity;
import com.taxi.driver.data.entity.EvaluateEntity;
import com.taxi.driver.data.entity.FeedBackEntity;
import com.taxi.driver.data.entity.HomeEntity;
import com.taxi.driver.data.entity.MessageEntity;
import com.taxi.driver.data.entity.ProblemEntity;
import com.taxi.driver.data.entity.ShareEntity;
import com.taxi.driver.data.entity.UpdateMsg;
import com.taxi.driver.data.entity.WithdrawalDetailsEntity;
import com.taxi.driver.data.entity.WithdrawaleRecordEntity;

import java.util.HashMap;
import java.util.List;

import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
import rx.Observable;

/**
 * appid、noncestr和sign 这三个参数，将在RequestInterceptor中添加；
 * <p>
 * 调用接口时，无需传入这三个参数。
 */
public interface DriverApi {

    @FormUrlEncoded
    @POST("login/login.yueyue")
    Observable<DriverEntity> login(@FieldMap HashMap<String, String> params);

    /**
     * 退出登录
     *
     * @return
     */
    @POST("token/login/logout.yueyue")
    @FormUrlEncoded
    Observable<String> reqLogout(@Field("onWorkLng") double onWorkLng,
                                 @Field("onWorkLat") double onWorkLat,
                                 @Field("uploadText") String uploadText);


    /**
     * @param phone    电话号码
     * @param noncestr 时间戳
     * @param sign     签名
     * @return
     */
    @FormUrlEncoded
    @POST("common/newIdentify")
    Observable<String> reqVerifyCode(@Field("mobile") String phone,
                                     @Field("noncestr") String noncestr,
                                     @Field("sign") String sign);


    /**
     * 获取用户信息
     *
     * @return
     */
    @POST("token/user/info.yueyue")
    Observable<DriverEntity> getUserInfo();


    /**
     * 获取出车状态
     *
     * @return
     */
    @FormUrlEncoded
    @POST("token/work/isWork.yueyue")
    Observable<String> reqDutyStatus(@Field("type") int type);

    /**
     * 出车
     *
     * @return
     */
    @FormUrlEncoded
    @POST("token/work/on.yueyue")
    Observable<String> reqOnDuty(@Field("onWorkLng") double onWorkLng,
                                 @Field("onWorkLat") double onWorkLat,
                                 @Field("uploadText") String uploadText);

    /**
     * 收车
     *
     * @return
     */
    @FormUrlEncoded
    @POST("token/work/off.yueyue")
    Observable<String> reqOffDuty(@Field("offWorkLng") double offWorkLng,
                                  @Field("offWorkLat") double offWorkLat,
                                  @Field("uploadText") String uploadText);

    /**
     * 获取账单列表
     *
     * @param nowPage
     * @param dateType
     * @param start
     * @param end
     * @param type
     * @return
     */
    @FormUrlEncoded
    @POST("token/accDetail/list.yueyue")
    Observable<BillEntity> reqBills(@Field("nowPage") int nowPage,
                                    @Field("dateType") int dateType,
                                    @Field("start") String start,
                                    @Field("end") String end,
                                    @Field("type") String type);

    /**
     * 提现记录
     *
     * @param nowPage
     * @return
     */
    @FormUrlEncoded
    @POST("token/accDetail/listCash.yueyue")
    Observable<List<WithdrawaleRecordEntity>> widthdrawalRecord(@Field("nowPage") int nowPage);

    /**
     * 获取常见的问题
     *
     * @return
     */
    @POST("tag/problem.yueyue")
    Observable<List<ProblemEntity>> getProblems();

    /**
     * 获取回馈列表
     *
     * @param nowPage
     * @return
     */
    @FormUrlEncoded
    @POST("token/feedback/list.yueyue")
    Observable<List<FeedBackEntity>> getFeedbacks(@Field("nowPage") int nowPage);

    /**
     * 添加反馈接口
     *
     * @param title
     * @param content
     * @return
     */
    @FormUrlEncoded
    @POST("token/feedback/add.yueyue")
    Observable<String> addFeedback(@Field("title") String title,
                                   @Field("content") String content);

    /**
     * 获取提现详情
     *
     * @param cashUuid
     * @return
     */
    @FormUrlEncoded
    @POST("token/user/cashInfo.yueyue")
    Observable<WithdrawalDetailsEntity> getWithdrawalInfo(@Field("cashUuid") String cashUuid);

    /**
     * 提现
     *
     * @param cash
     * @param collectAccount
     * @param collectType
     * @param password
     * @return
     */
    @FormUrlEncoded
    @POST("token/user/cash.yueyue")
    Observable<String> withdrawal(
            @Field("cash") String cash,
            @Field("collectAccount") String collectAccount,
            @Field("collectType") int collectType,
            @Field("password") String password);

    /**
     * 获取司机考核统计
     *
     * @param startTime
     * @param endTime
     * @return
     */
    @FormUrlEncoded
    @POST("token/user/examination.yueyue")
    Observable<AssessmentEntity> reqAssessment(
            @Field("startTime") String startTime,
            @Field("endTime") String endTime);

    /**
     * 获取乘客评价统计数据
     *
     * @return
     */
    @POST("token/user/findEvaluateData.yueyue")
    Observable<EvaluateEntity> getEvaluates();

    /**
     * 获得前一天评价
     *
     * @param nowPage
     * @return
     */
    @FormUrlEncoded
    @POST("token/user/evaluate.yueyue")
    Observable<List<CommentEntity>> getYesterdayEvaluates(@Field("nowPage") int nowPage);

    /**
     * 新旧密码更改
     *
     * @param newPsw
     * @param oldPsw
     * @return
     */
    @FormUrlEncoded
    @POST("token/user/resetByPsw.yueyue")
    Observable<String> resetPw(
            @Field("newPsw") String newPsw,
            @Field("oldPsw") String oldPsw);

    /**
     * 获取司机信息列表
     *
     * @param nowPage  当前页数
     * @param pageType 获取类型
     * @return
     */
    @FormUrlEncoded
    @POST("token/message/list.yueyue")
    Observable<List<MessageEntity>> getMsgList(@Field("nowPage") int nowPage,
                                               @Field("pageType") int pageType);

    /**
     * 更新消息状态
     *
     * @param uuid
     * @param status
     * @return
     */
    @FormUrlEncoded
    @POST("token/message/update.yueyue")
    Observable<UpdateMsg> updateMsg(@Field("uuid") String uuid,
                                    @Field("status") int status);

    /**
     * 删除全部的消息
     *
     * @return
     */
    @POST("token/message/delAllMsg.yueyue")
    Observable<String> deleteMsg();

    /**
     * 删除指定消息
     *
     * @param uuid
     * @return
     */
    @FormUrlEncoded
    @POST("token/message/homeDel.yueyue")
    Observable<String> deleteMsg(@Field("uuid") String uuid);

    /**
     * 验证身份证号
     *
     * @param mobile
     * @param idcard
     * @return
     */
    @FormUrlEncoded
    @POST("user/validate.yueyue")
    Observable<String> validate(@Field("mobile") String mobile,
                                @Field("idcard") String idcard);

    /**
     * 获取验证码
     *
     * @param mobile 手机号
     * @return
     */
    @FormUrlEncoded
    @POST("identifyCode/send.yueyue")
    Observable<String> sendCode(@Field("mobile") String mobile);

    /**
     * 验证验证码
     *
     * @param mobile
     * @param identifyCode
     * @return
     */
    @FormUrlEncoded
    @POST("user/verifyCode.yueyue")
    Observable<String> verifyCode(@Field("mobile") String mobile,
                                  @Field("identifyCode") String identifyCode);

    /**
     * 修改密码
     *
     * @param mobile
     * @param identifyCode
     * @param idcard
     * @param password
     * @param type
     * @return
     */
    @FormUrlEncoded
    @POST("user/reset.yueyue")
    Observable<String> resetPwd(@Field("mobile") String mobile,
                                @Field("identifyCode") String identifyCode,
                                @Field("idcard") String idcard,
                                @Field("password") String password,
                                @Field("type") int type);

    /**
     * 获取首页信息接口
     *
     * @return
     */
    @POST("token/order/taxi/home.yueyue")
    Observable<HomeEntity> reqWorkInfo();
//    @POST("token/user/homepage.yueyue")
//    Observable<HomePageEntity> reqWorkInfo();


    /**
     * 获取取消标签
     *
     * @return
     */
    @POST("tag/cancelMsg.yueyue")
    Observable<List<CancelReasonEntity>> reqCancelMsg();

    /**
     * 获取投诉标签
     *
     * @return
     */
    @POST("tag/complain.yueyue")
    Observable<List<ComplainEntity>> reqComplainMsg();

    /**
     * 设置听单模式
     *
     * @param remindType
     * @param appointTimeStart
     * @param appointTimeEnd
     * @return
     */
    @FormUrlEncoded
    @POST("token/user/remind.yueyue")
    Observable<String> setRemindType(@Field("remindType") int remindType,
                                     @Field("appointTimeStart") String appointTimeStart,
                                     @Field("appointTimeEnd") String appointTimeEnd);

    @POST("token/share/info.yueyue")
    Observable<ShareEntity> shareInfo();

    /**
     * 上传错误日志
     *
     * @param errorTime
     * @param errorModule
     * @param errorType
     * @param errorMsg
     * @param terminalId
     * @param terminalVersion
     * @return
     */
    @FormUrlEncoded
    @POST("token/uploadErrorMsg.yueyue")
    Observable<String> uploadErrorMsg(@Field("errorTime") String errorTime,
                                      @Field("errorModule") String errorModule,
                                      @Field("errorType") String errorType,
                                      @Field("errorMsg") String errorMsg,
                                      @Field("terminalId") String terminalId,
                                      @Field("terminalVersion") String terminalVersion);
}